package com.qf.controller;

import javax.servlet.*;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.*;
import java.io.IOException;
import java.lang.reflect.Method;

//公共的Servlet
public class BaseServlet extends HttpServlet {


    //后端Servlet的入口
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        try {
            //获取BaseServlet的子类的字节码文件对象
            Class clazz = this.getClass() ;
            System.out.println(clazz);

            //创建当前子类实例
            Object obj = clazz.newInstance();
            System.out.println(obj);

            //在location地址栏上约定一种格式
            //http://localhost:8080/Servlet_Jdbc_Jsp_war_exploded/模块名称?methodName=子类方法名
            String methodName = request.getParameter("methodName");//获取地址栏上的参数

            //http://localhost:8080/Servlet_Jdbc_Jsp_war_exploded/ :访问前台主页
            if(methodName==null){
                methodName = "index" ; //给一个方法名 index
            }
            System.out.println("子类的方法名是:"+methodName) ;

            //通过当前子类的字节码文件对象获取成员方法所在的Method类对象
            Method m = clazz.getDeclaredMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);//指定的方法
            //如果这个方法私有/受保护的protected,应该取消java语言访问检查
            m.setAccessible(true) ;
            //调用方法
            m.invoke(obj,request,response) ;


            //获取子类目的:调用子类的方法 举例:--->add方法
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
    public void index(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
        System.out.println("BaseServlet的index");
    }
}
